config: clamp dhcpv6_hostid_len instead of only logging an error
authorPaul Donald <[email protected]>
Fri, 10 Oct 2025 11:44:05 +0000 (13:44 +0200)
committerÁlvaro Fernández Rojas <[email protected]>
Mon, 13 Oct 2025 07:53:54 +0000 (09:53 +0200)
Signed-off-by: Paul Donald <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/225
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
src/config.c

index 3cd9b5209b4a0aaa2e908affd80e5e9254a11537..6792b5495e98e98086dbd64cb73b966af35133e8 100644 (file)
@@ -1314,14 +1314,20 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
                iface->dhcpv6_na = blobmsg_get_bool(c);
 
        if ((c = tb[IFACE_ATTR_DHCPV6_HOSTID_LEN])) {
-               uint32_t hostid_len = blobmsg_get_u32(c);
+               uint32_t original_hostid_len, hostid_len;
+               original_hostid_len = hostid_len = blobmsg_get_u32(c);
 
-               if (hostid_len >= HOSTID_LEN_MIN && hostid_len <= HOSTID_LEN_MAX)
-                       iface->dhcpv6_hostid_len = hostid_len;
-               else
-                       syslog(LOG_ERR, "Invalid %s value configured for interface '%s'",
-                               iface_attrs[IFACE_ATTR_DHCPV6_HOSTID_LEN].name, iface->name);
+               if (hostid_len < HOSTID_LEN_MIN)
+                       hostid_len = HOSTID_LEN_MIN;
+               else if (hostid_len > HOSTID_LEN_MAX)
+                       hostid_len = HOSTID_LEN_MAX;
+
+               iface->dhcpv6_hostid_len = hostid_len;
 
+               if (original_hostid_len != hostid_len) {
+                       syslog(LOG_WARNING, "Clamped invalid %s value configured for interface '%s' to %d",
+                                  iface_attrs[IFACE_ATTR_DHCPV6_HOSTID_LEN].name, iface->name, iface->dhcpv6_hostid_len);
+               }
        }
 
        if ((c = tb[IFACE_ATTR_RA_DEFAULT]))